import { http } from "@/utils/http";

/** 统一响应格式 */
export interface ApiResponse<T = any> {
  /** 状态码 */
  code: number;
  /** 响应消息 */
  message: string;
  /** 响应数据 */
  data?: T;
  /** 时间戳 */
  timestamp?: number;
}

// ==================== 用户个人信息相关类型定义 ====================

/** 用户基本信息 */
export interface UserProfile {
  /** 用户ID */
  userId: number;
  /** 用户名 */
  userName: string;
  /** 昵称 */
  nickName: string;
  /** 邮箱 */
  email: string;
  /** 手机号 */
  phonenumber: string;
  /** 头像URL */
  avatar?: string;
  /** 性别：0=男，1=女，2=未知 */
  sex: string;
  /** 个性签名 */
  signature?: string;
  /** 状态 */
  status: number;
  /** 创建时间 */
  createTime: string;
  /** 用户统计信息 */
  userStats?: UserStats;
}

/** 用户统计信息 */
export interface UserStats {
  /** 文章数量 */
  articleCount: number;
  /** 浏览量 */
  viewCount: number;
  /** 点赞数 */
  likeCount: number;
  /** 关注数 */
  followCount: number;
  /** 粉丝数 */
  followerCount: number;
}

/** 更新个人基本信息请求参数 */
export interface UpdateProfileRequest {
  /** 昵称，2-30个字符 */
  nickName?: string;
  /** 邮箱地址 */
  email?: string;
  /** 手机号码，11位数字 */
  phonenumber?: string;
  /** 头像URL */
  avatar?: string;
  /** 性别：0=男，1=女，2=未知 */
  sex?: string;
  /** 个性签名，最多200个字符 */
  signature?: string;
}

/** 修改密码请求参数 */
export interface ChangePasswordRequest {
  /** 当前密码 */
  currentPassword: string;
  /** 新密码，6-20个字符 */
  newPassword: string;
  /** 确认新密码 */
  confirmPassword: string;
}

/** 头像上传响应数据 */
export interface AvatarUploadData {
  /** 文件名 */
  fileName: string;
  /** 文件URL */
  fileUrl: string;
  /** 相对路径 */
  relativePath: string;
  /** 文件大小 */
  fileSize: number;
  /** 上传时间 */
  uploadTime: string;
}

// ==================== 响应类型定义 ====================

/** 获取用户信息响应结果 */
export type GetUserProfileResult = ApiResponse<UserProfile>;

/** 更新个人信息响应结果 */
export type UpdateProfileResult = ApiResponse;

/** 修改密码响应结果 */
export type ChangePasswordResult = ApiResponse;

/** 头像上传响应结果 */
export type AvatarUploadResult = ApiResponse<AvatarUploadData>;

// ==================== API接口函数 ====================

/**
 * 获取当前用户个人信息
 */
export const getCurrentUserProfileApi = () => {
  return http.request<GetUserProfileResult>("get", "/api/user/profile");
};

/**
 * 更新个人基本信息
 */
export const updateUserProfileApi = (data: UpdateProfileRequest) => {
  return http.request<UpdateProfileResult>("put", "/api/user/updateProfile", {
    data
  });
};

/**
 * 修改密码
 */
export const changePasswordApi = (data: ChangePasswordRequest) => {
  return http.request<ChangePasswordResult>("put", "/api/user/password", {
    data
  });
};

/**
 * 上传头像 - 使用统一上传接口
 */
export const uploadAvatarApi = async (file: File) => {
  // 导入统一上传API
  const { uploadAvatarApi: unifiedUploadAvatarApi } = await import(
    "@/api/unified-upload"
  );

  const response = await unifiedUploadAvatarApi(file);

  // 转换响应格式以保持兼容性
  return {
    code: response.code,
    message: response.message,
    data: response.data
      ? {
          avatarUrl: response.data.fileUrl,
          fileName: response.data.fileName,
          fileUrl: response.data.fileUrl,
          relativePath: response.data.relativePath || response.data.fileUrl,
          fileSize: response.data.fileSize,
          uploadTime: String(response.data.uploadTime)
        }
      : null,
    timestamp: response.timestamp
  } as AvatarUploadResult;
};

// ==================== 工具函数 ====================

/**
 * 验证昵称格式
 */
export const validateNickName = (nickName: string): boolean => {
  if (!nickName) return false;
  return nickName.length >= 1 && nickName.length <= 50;
};

/**
 * 验证邮箱格式
 */
export const validateEmail = (email: string): boolean => {
  if (!email) return false;
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return emailRegex.test(email);
};

/**
 * 验证手机号格式
 */
export const validatePhoneNumber = (phone: string): boolean => {
  if (!phone) return false;
  const phoneRegex = /^1[3-9]\d{9}$/;
  return phoneRegex.test(phone);
};

/**
 * 验证密码格式
 */
export const validatePassword = (password: string): boolean => {
  if (!password) return false;
  return password.length >= 6 && password.length <= 20;
};

/**
 * 验证文件类型（头像上传）- 使用统一验证工具
 */
export const validateImageFile = async (file: File): Promise<boolean> => {
  const { UnifiedFileUploadUtils } = await import("@/api/unified-upload");
  return UnifiedFileUploadUtils.isImageTypeSupported(file);
};

/**
 * 验证文件大小（头像上传）- 使用统一验证工具
 */
export const validateFileSize = async (
  file: File,
  _maxSizeMB: number = 2 // 头像限制2MB
): Promise<boolean> => {
  const { UnifiedFileUploadUtils, FileUploadType } = await import(
    "@/api/unified-upload"
  );
  return UnifiedFileUploadUtils.isFileSizeValid(file, FileUploadType.AVATAR);
};

/**
 * 格式化错误消息
 */
export const formatErrorMessage = (error: any): string => {
  if (error?.response?.data?.message) {
    return error.response.data.message;
  }
  if (error?.message) {
    return error.message;
  }
  return "操作失败，请稍后重试";
};
